﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO_MechSys;
using System.Data.SqlClient;
using System.Data;

namespace DAL_MechSys
{
    public class DALCliente : DALBase
    {
        private DTOCliente CriarCliente(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOCliente dtoCliente = new DTOCliente();

                if (!string.IsNullOrEmpty(sqlDataReader["ClienteID"].ToString()))
                {
                    dtoCliente.ClienteID = (int)sqlDataReader["ClienteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Nome"].ToString()))
                {
                    dtoCliente.Nome = (string)sqlDataReader["Nome"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Sobrenome"].ToString()))
                {
                    dtoCliente.Sobrenome = (string)sqlDataReader["Sobrenome"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["CPF"].ToString()))
                {
                    dtoCliente.CPF = (string)sqlDataReader["CPF"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataNascimento"].ToString()))
                {
                    dtoCliente.DataNascimento = (DateTime)sqlDataReader["DataNascimento"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Telefone"].ToString()))
                {
                    dtoCliente.Telefone = (string)sqlDataReader["Telefone"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Celular"].ToString()))
                {
                    dtoCliente.Celular = (string)sqlDataReader["Celular"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Email"].ToString()))
                {
                    dtoCliente.Email = (string)sqlDataReader["Email"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["EnderecoID"].ToString()))
                {
                    dtoCliente.EnderecoID = (int)sqlDataReader["EnderecoID"];
                }


                return dtoCliente;
            }
            catch (Exception)
            {
                throw;
            }
        }
        private DTOCliente CriarClienteEndereco(SqlDataReader sqlDataReader)
        {
            try
            {
                DTOCliente dtoCliente = new DTOCliente();

                if (!string.IsNullOrEmpty(sqlDataReader["ClienteID"].ToString()))
                {
                    dtoCliente.ClienteID = (int)sqlDataReader["ClienteID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Nome"].ToString()))
                {
                    dtoCliente.Nome = (string)sqlDataReader["Nome"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Sobrenome"].ToString()))
                {
                    dtoCliente.Sobrenome = (string)sqlDataReader["Sobrenome"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["CPF"].ToString()))
                {
                    dtoCliente.CPF = (string)sqlDataReader["CPF"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["DataNascimento"].ToString()))
                {
                    dtoCliente.DataNascimento = (DateTime)sqlDataReader["DataNascimento"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Telefone"].ToString()))
                {
                    dtoCliente.Telefone = (string)sqlDataReader["Telefone"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Celular"].ToString()))
                {
                    dtoCliente.Celular = (string)sqlDataReader["Celular"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Email"].ToString()))
                {
                    dtoCliente.Email = (string)sqlDataReader["Email"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["EnderecoID"].ToString()))
                {
                    dtoCliente.EnderecoID = (int)sqlDataReader["EnderecoID"];
                }

                if (!string.IsNullOrEmpty(sqlDataReader["Rua"].ToString()))
                {
                    dtoCliente.Rua = sqlDataReader["Rua"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Bairro"].ToString()))
                {
                    dtoCliente.Bairro = sqlDataReader["Bairro"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["CEP"].ToString()))
                {
                    dtoCliente.CEP = sqlDataReader["CEP"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Cidade"].ToString()))
                {
                    dtoCliente.Cidade = sqlDataReader["Cidade"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Complemento"].ToString()))
                {
                    dtoCliente.Complemento = sqlDataReader["Complemento"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["Numero"].ToString()))
                {
                    dtoCliente.Numero = sqlDataReader["Numero"].ToString();
                }
                if (!string.IsNullOrEmpty(sqlDataReader["UFID"].ToString()))
                {
                    dtoCliente.Estado = (int)sqlDataReader["UFID"];
                }

                return dtoCliente;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public void Inserir(DTOCliente dtoCliente)
        {
            try
            {
                string storedProssidere = "sp_InserirCliente";
                SqlParameter[] parameters =
                
                {                    
                   new SqlParameter("@nome", dtoCliente.Nome),
                   new SqlParameter("@sobrenome", dtoCliente.Sobrenome),
                   new SqlParameter("@cpf", dtoCliente.CPF),
                   new SqlParameter("@dataNascimento", dtoCliente.DataNascimento),
                   new SqlParameter("@telefone", dtoCliente.Telefone),                       
                   new SqlParameter("@celular", dtoCliente.Celular),
                   new SqlParameter("@email", dtoCliente.Email),
                   new SqlParameter("@enderecoID", dtoCliente.EnderecoID),
                   new SqlParameter("@dataRegistro", DateTime.Now)

                };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public List<DTOCliente> BuscarClientesCadastrados()
        {
            List<DTOCliente> lstClietnes = new List<DTOCliente>();

            try
            {
                string storedProssidere = "sp_BuscarClientesCadastrados";
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere))
                {
                    while (sqlDataReader.Read())
                    {

                        DTOCliente dtoCliente = CriarCliente(sqlDataReader);

                        lstClietnes.Add(dtoCliente);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstClietnes;
        }

        public void Atualizar(DTOCliente dtoCliente)
        {
            try
            {
                string storedProssidere = "sp_AtualizarCliente";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@clienteID", dtoCliente.ClienteID),
                           new SqlParameter("@nome", dtoCliente.Nome),
                           new SqlParameter("@sobrenome", dtoCliente.Sobrenome),
                           new SqlParameter("@cpf", dtoCliente.CPF),
                           new SqlParameter("@dataNascimento", dtoCliente.DataNascimento),
                           new SqlParameter("@telefone", dtoCliente.Telefone),                       
                           new SqlParameter("@celular", dtoCliente.Celular),
                           new SqlParameter("@email", dtoCliente.Email),
                           new SqlParameter("@enderecoID", dtoCliente.EnderecoID),
                           new SqlParameter("@dataRegistro", DateTime.Now)            
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public void Excluir(int clienteID)
        {
            try
            {
                string storedProssidere = "sp_ExcluirCliente";
                SqlParameter[] parameters =

                        {                    
                           new SqlParameter("@clienteID", clienteID)                                    
                        };
                ExecuteNonQuery(storedProssidere, parameters);

            }

            catch (SqlException)
            {
                throw;
            }
        }

        public bool VerificaSeClienteIDExiste(int clienteID)
        {
            bool Existe = false;

            try
            {
                string storedProssidere = "sp_VerificaSeClienteIDExiste";

                SqlParameter[] parameters =
            {
                new SqlParameter("@clienteID", clienteID),                            
            };

                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        int NumReg = (int)sqlDataReader["NumeroRegistros"];
                        if (NumReg > 0)
                        {
                            Existe = true;
                        }

                    }
                }
                return Existe;

            }
            catch (Exception)
            {
                throw;
            }

        }

        public DTOCliente BuscarNomePorClienteID(int clienteID)
        {
            DTOCliente dtoCliente = new DTOCliente(); ;

            try
            {
                string storedProssidere = "sp_BuscarNomePorClienteID";
                SqlParameter[] parameters =
                        {                    
                           new SqlParameter("@clienteID", clienteID)                                    
                        };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    if (sqlDataReader.Read())
                    {
                        dtoCliente.Nome = (string)sqlDataReader["Nome"];
                        dtoCliente.Sobrenome = (string)sqlDataReader["Sobrenome"];

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }

            return dtoCliente;
        }

        public List<DTOCliente> PesquisarClientes(string texto)
        {
            List<DTOCliente> lstCliente = new List<DTOCliente>();

            try
            {
                string storedProssidere = "sp_BuscarClientesPesquisa";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@string", texto)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        DTOCliente dtoCliente = CriarCliente(sqlDataReader);

                        lstCliente.Add(dtoCliente);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return lstCliente;
        }


        public DTOCliente PesquisarClienteID(int codigo)
        {
            DTOCliente dtoCliente = new DTOCliente();
            try
            {
                string storedProssidere = "sp_BuscarClientePesquisaID";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@int", codigo)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        dtoCliente = CriarCliente(sqlDataReader);
                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return dtoCliente;
        }

        public DTOCliente PesquisarDonoVeiculo(int VeiculoID)
        {
            DTOCliente dtoCliente = new DTOCliente();
            try
            {
                string storedProssidere = "sp_BuscarDonoVeiculo";

                SqlParameter[] parameters =                
                { 
                   new SqlParameter("@veiculoID", VeiculoID)
                  
                };
                using (SqlDataReader sqlDataReader = ExecuteReader(storedProssidere, parameters))
                {
                    while (sqlDataReader.Read())
                    {
                        dtoCliente = CriarClienteEndereco(sqlDataReader);

                    }
                }
            }
            catch (SqlException)
            {
                throw;
            }
            return dtoCliente;
        }
    }
}
